﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Comissoes.Models;
using Comissoes.JQGridObject;
using Comissoes.Utilities;
using Comissoes.Security;

namespace Comissoes.Controllers
{
    public class ComissoesController : AppController
    {
        xcontEntities db = new xcontEntities();

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Digitacao(Int32? id)
        {
            return View(new ComissoesModel(id ?? 0));
        }

        public ActionResult Update()
        {
            ComissoesModel comissao = new ComissoesModel(Convertions.Inteiro(Request["ID_COMS"]));

            comissao.UpdateValidate(Request);
            if (comissao.SemErros())
            {
                comissao.Update(Request);
                if (comissao.SemErros())
                {
                    return Json(new { result = true }, JsonRequestBehavior.AllowGet);
                }
            }

            return Json(new { result = false, erros = comissao.erros }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Consulta()
        {
            return View();
        }

        // Monta a lista de tipos de produtos
        public JsonResult ComissoesList(String sidx, String sord, Int32 page, Int32 rows, Boolean _search, String searchField, String searchOper, String searchString, String status)
        {
            // A - Pendentes B - Liberadas C - Confirmadas
            Int32 ID_PESSOA = Access.User.PESSOAS.ID_PESSOA;

            var q = from c in db.COMISSOES.Include("VENDEDORES")
                                          .Include("VENDEDORES.PESSOAS")
                                          .Include("CLIENTES")
                                          .Include("CLIENTES.PESSOAS")
                                          .ToList()
                    where (status == "B" ? c.DATAFAT_COMS.HasValue : true)
                    && (c.STATUS_COMS == status)
                    && (!db.VENDEDORES.Any(t => t.PESSOAS.ID_PESSOA == ID_PESSOA) ? true : c.VENDEDORES.PESSOAS.ID_PESSOA == ID_PESSOA)
                    select new
                    {
                        c.ID_COMS,
                        c.DATAFAT_COMS,
                        c.DATAVENC_COMS,
                        DOCTO_COMS = c.NUMERO_COMS + "/" + c.LETRA_COMS,
                        c.VALOR_COMS,
                        SALDO_COMS = db.COMISSOES.Where(t => t.NUMERO_COMS == c.NUMERO_COMS && (!t.VALPAG_COMS.HasValue || !t.DATAFAT_COMS.HasValue)).Sum(t => t.VALOR_COMS) ?? 0,
                        NOME_CLI = c.CLIENTES.PESSOAS.NOME_PESSOA,
                        TIPO_CMS = c.TIPO_COMS == "A" ? "C" : "D",
                        PARCELA_CMS = c.PARCELA_COMS,
                        c.VALPAG_COMS,
                        Confirmar = c.VENDEDORES.PESSOAS.ID_PESSOA == ID_PESSOA && status == "B" && c.DATAFAT_COMS.HasValue ? "<img class=\"confirmar\" src=\"../../Content/Images/money.png\" title=\"confirmar recebimento\" onclick=\"javascript:Confirmar(" + c.ID_COMS + ")\" />" : ""
                    };

            Dictionary<string, string> formats = new Dictionary<string, string>
            {
                { "DATAFAT_COMS", "B" },
                { "DATAVENC_COMS", "B" },
                { "VALOR_COMS", "A" },
                { "SALDO_COMS", "A" },
                { "VALPAG_COMS", "A" }
            };

            JQGridBuilder jbuilder = new JQGridBuilder(q.AsQueryable(), page, sidx, sord, searchField, searchString, searchOper, "ID_COMS", _search, rows, formats);

            return Json(jbuilder.GetObject(), JsonRequestBehavior.AllowGet);
        }

        public JsonResult Confirmar(Int32? id, String Comissoes)
        {
            ComissoesModel comissao = new ComissoesModel(id ?? 0);
            
            comissao.Confirmar(Comissoes);
            if (comissao.SemErros())
            {
                return Json(new { result = true }, JsonRequestBehavior.AllowGet);
            }

            return Json(new { result = false, erros = comissao.erros }, JsonRequestBehavior.AllowGet);
        }
    }
}